import vnode from "./vnode";
import createElement from './createElement';
import patchVnode from './patchVnode';

export default function(oldVnode, newVnode) {
  // 1. 如果oldVnode没有sel，则表示是真实的节点
  // 需要变成虚拟节点
  if(oldVnode.sel == undefined) {
    oldVnode = vnode(
      oldVnode.tagName.toLowerCase(),
      {}, // data
      [], // children
      undefined, // text
      oldVnode, // elm
    )
  }

  // 2.判断 旧节点和新的虚拟节点是不是同一个
  if(oldVnode.sel === newVnode.sel) {
    // 2.1 是相同的节点名称
    patchVnode(oldVnode, newVnode);
  } else {
    // 不是同一个节点
    // 把新的虚拟节点创建为dom节点
    let newVnodeElm = createElement(newVnode);
    // 获取旧的节点, .elm为真实节点
    let oldVnodeElm = oldVnode.elm;
    // 创建新的节点,在旧的节点前面插入
    oldVnodeElm.parentNode.insertBefore(newVnodeElm, oldVnodeElm);
    // 删除旧的节点
    oldVnodeElm.parentNode.removeChild(oldVnodeElm);

  }

}